home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok46.lha
/
Module
/
IntuitionObjekte.def
< prev
next >
Wrap
Text File
|
1993-08-15
|
14KB
|
378 lines
(*
* --------------------------------------------------------------------------
* :Program. IntuitionObjekte.def
* :Contents. komplexe Intuition-Gadgets mit Unterstützung.
* :Author. Reiner Nix
* :Adress. Geranienhof 2, 5000 Köln 71 Seeberg
* :Language. Modula-2
* :Translator. M2Amiga AMSoft, Version 3.3d
* :History. V1.1 (privat) ;nur für ein Fenster
* :History. V1.2 19.Februar.90 ;für mehrere Fenster
*
*
* PRIVAT: Window^.userData := FensterInfoPtr;
* PRIVAT: Gadget^.userData := ObjektPtr;
* PRIVAT: Diese Zeiger dürfen NICHT geändert werden!
*
* WICHTIG: Für ein einfaches Eingabeobjekt "string" muß der Eingabetext
* WICHTIG: EingabeLaenge + 2 lang sein:
* WICHTIG: EingabeLaenge + Leerzeichen + Nullbyte zum Abschluß,
* WICHTIG: das Leerzeichen wird intern benutzt, das Nullbyte wird
* WICHTIG: nötigenfalls angefügt.
*
* --------------------------------------------------------------------------
*)
DEFINITION MODULE IntuitionObjekte;
FROM SYSTEM IMPORT FFP, LONGSET;
FROM Graphics IMPORT FontStyleSet;
FROM Intuition IMPORT IDCMPFlagSet, GadgetFlagSet,
WindowPtr, GadgetPtr, IntuiMessage;
TYPE ObjektPtr;
(*
* --------------------------------------------------------------------------
* RandTyp verschiedene Ränder sind zur Zeit noch nicht implementiert,
* aber so etwas, wie gewisse Standardränder soll mal kommen.
* --------------------------------------------------------------------------
*)
RandTyp =(einfach, rund, perspekive);
(*
* --------------------------------------------------------------------------
* Gegenstand des Moduls sind komplexe Intuition-Gadgets, hier Objekte genannt,
* die Objekte sollen je nach Typ unterschiedliche Ereignisse gemeldet
* bekommen und dann in einer dem Objekt verbundenen Aktion verarbeiten.
*
* ObjektTypen:
* wechseln mögliche Ereignisse sind "An" und "Aus".
* melden mögliches Ereigniss ist "Treffer"
* wiederholen mögliche Ereignisse sind "Start", "Wiederholung", "Ende".
* Es wird mit Mausdruck das Ereignis "Start" gesendet, danach
* wird solange (je IntuiTick) "Wiederholung" gesendet bis das
* der Mausknopf losgelassen wird, was mit "Ende" gemeldet wird.
* eingeben mögliche Ereignisse sind "Start", "Wiederholung", "Ende",
* "Eingabe", "SonderEingabe". Wird das Objekt aktiviert, so
* wird "Start" gesendet, bei Neupositionierung des Cursors mit
* der Maus wird "Wiederholung" gesendet, soll das Objekt seine
* Aktion abschließen (da ein anderes aktiviert werden soll) wird
* "Ende" gesendet. "Eingabe" und "SonderEingabe" melden ein-
* getroffende Vanilla- oder Raw-Zeichen.
* --------------------------------------------------------------------------
*)
ObjektTyp =(wechseln, melden, wiederholen, eingeben);
BooleanTyp =ObjektTyp [wechseln..wiederholen];
ProportionalTyp =ObjektTyp [melden..wiederholen];
ObjektEreignis =(Treffer, An, Aus, Start, Wiederholung, Ende,
Eingabe, SonderEingabe);
ObjektEnde =(returnEnde, pfeilEnde, externEnde);
(*
* --------------------------------------------------------------------------
* ObjektAktion ist die Procedure, die bei Eintreffen eines passenden
* Ereignisses aktiviert wird. Damit mit einer Aktion mehrere
* gleich zu behandelnde Objekte versorgt werden können, wird
* ebenfalls ein Zeiger aus das Objekt weitergegeben.
* Bei Eingabeobjekten ist als Procedure "standardTextAktion"
* eingestellt.
* --------------------------------------------------------------------------
*)
ObjektAktion =PROCEDURE ( ObjektEreignis, (* Ereignis *)
ObjektPtr); (* objekt *)
(*
* --------------------------------------------------------------------------
* PruefeEingabe bei einem Eingabeobjekt werden die Ereignisse schon über
* "standardtextAktion" behandelt, deswegen ist die Möglichkeit
* gegeben die eingegebenen Daten auf Korrektheit zu prüfen.
* Fällt die Prüfung negativ aus (FALSE), so wird die Eingabe
* nicht beendet, das Objekt bleibt aktiv.
* --------------------------------------------------------------------------
*)
PruefeEingabe =PROCEDURE ( ObjektPtr) :BOOLEAN;
(*
* --------------------------------------------------------------------------
* EingabeOk soll bei eine, Eingabeobjekt keine Prüfung erfolgen, so ist
* die Dummy-Procedure EingabeOk anzugeben. Ihr Wert ist immer
* gleich TRUE.
* --------------------------------------------------------------------------
*)
PROCEDURE EingabeOk ( objekt :ObjektPtr) :BOOLEAN;
(*
* --------------------------------------------------------------------------
* setzeXXX Voreinstellungen, die für die nachfolgend erzeugten
* Objekte benutzt werden.
* setzeAusrichtung Einstellung für relative Objektgröße und -position,
* z.B. YrelHoehe.
* setzeGadgetTyp z.B. für gzzGadget, normales Objekt = 0.
* setzeTextZeichensatz öffnet Zeichensatz und bereitet ihn zur automatischen
* Benutzung vor.
* setzeEingabeZeichen. wir setzteTextZeichensatz, jedoch darf kein
* proportionaler zeichensatz benutzt werden.
* --------------------------------------------------------------------------
*)
PROCEDURE setzeTextFarbe ( Vorne, Hinten :INTEGER);
PROCEDURE setzeRandFarbe ( Vorne, Hinten :INTEGER);
PROCEDURE setzeEingabeFarbe ( Vorne, Hinten :INTEGER);
PROCEDURE setzeLinienFarbe ( Vorne, Hinten :INTEGER);
PROCEDURE setzeRand ( neuerRand :RandTyp);
PROCEDURE setzeAusrichtung ( neueAusrichtung :GadgetFlagSet);
PROCEDURE setzeGadgetTyp ( neuerTyp :CARDINAL);
PROCEDURE setzeTextZeichensatz ( Name :ARRAY OF CHAR;
Groesse :CARDINAL;
Stil :FontStyleSet);
PROCEDURE setzeEingabeZeichensatz ( Name :ARRAY OF CHAR;
Groesse :CARDINAL;
Stil :FontStyleSet);
(*
* --------------------------------------------------------------------------
* setzeBenutzterIDCMP da für die Objekte ebenfalls gewisse, sich ändernde
* IDCMP-Flags nötig sind sollte ein Benutzter den
* IDCMP nicht direkt verändern, sondern über die
* Procedure setzeBenutzterIDCMP. Man muß darauf einge-
* stellt sein, das auch nicht angeforderte Events
* ankommen (eben für die Objekte) und diese ignorieren.
* --------------------------------------------------------------------------
*)
PROCEDURE setzeBenutzerIDCMP ( Fenster :WindowPtr;
BenutzerFlags :IDCMPFlagSet);
(*
* --------------------------------------------------------------------------
* loescheObjekte Das spezifizierte Objekt wird mitsamt seiner
* verbundenen Strukturen entfernt.
* loescheAlleObjekte wie oben, jedoch für alle Objekte dieses Fensters.
*
* ACHTUNG: Da die Objekte nicht nur für sich allein stehen, sondern
* in Abhängikeit zu verschiedenen Zusatzinformationen sind, kann
* man diese nicht ohne weiteres ändern. Man benutze hierzu die
* Zugriffsfunktionen oder sei sich anhand des Implementations-
* moduls sicher, daß keine unerwünschten Beeinflussungen
* erfolgen.
* Insbesondere wird über Fenster.userData und Gadget.userData
* auf Zusatzstrukturen verwiesen, die alle für das Fenster /
* Objekt speziellen Daten enthalten.
* Die benutzten Fenster müßen also mindestens solange geöffnet
* bleiben, wie dafür Objekte existieren.
* --------------------------------------------------------------------------
*)
PROCEDURE loescheObjekt ( objekt :ObjektPtr);
PROCEDURE loescheAlleObjekte ( Fenster :WindowPtr);
(*
* --------------------------------------------------------------------------
* findeObjekt gibt einen Zeiger auf das erste Objekt mit dieser
* Nummer wieder; NIL falls nicht vorhanden.
* verbindeObjekte verkettet schon angelegte Textobjekte miteinander,
* damit die Pfeiltasten benutzbar sind. Soll keine
* Verbindung in eine Richtung entstehen ist eine
* unbenutzte Objektnummer anzugeben.
* --------------------------------------------------------------------------
*)
PROCEDURE findeObjekt ( Fenster :WindowPtr;
Nummer :INTEGER) :ObjektPtr;
PROCEDURE verbindeObjekte ( Fenster :WindowPtr;
ObjektNr,
obererNachbar,
untererNachbar,
rechterNachbar,
linkerNachbar :INTEGER);
(*
* --------------------------------------------------------------------------
* aenderInfoSatz ändert den Infosatz des Objektes und gibt ihn aus.
* Die Länge wird beibehalten, also gefüllt oder gekürzt.
* erneuerObjekt Wenn bei einem Eingabeobjekt die Eingabedate geändert
* wurde muß mit erneuerObjekt diese in die internen
* Strukturen übernommen und gezeichnet werden.
* erneuerObjekte wie oben, wirkt direkt auf viele.
* ACHTUNG: Der Cursor darf beim erneuern nicht auf das Objekt
* ACHTUNG: gesetzt sein.
* --------------------------------------------------------------------------
*)
PROCEDURE aenderInfoSatz ( objekt :ObjektPtr;
Text :ARRAY OF CHAR);
PROCEDURE erneuerObjekt ( objekt :ObjektPtr);
PROCEDURE erneuerObjekte ( Fenster :WindowPtr;
Objekte :LONGSET);
(*
* --------------------------------------------------------------------------
* verarbeiteNachricht verarbeitet alle IntuiMessages die Objekte betreffen
* zu Ereignissen und ruft die entsprechenden
* ObjektAktionen auf. Die Message wird nicht verändert,
* unbekannte Events werden ignoriert.
* --------------------------------------------------------------------------
*)
PROCEDURE verarbeiteNachricht ( Fenster :WindowPtr;
VAR Nachricht :IntuiMessage);
PROCEDURE frageObjektNr ( objekt :ObjektPtr) :INTEGER;
PROCEDURE frageGadget ( objekt :ObjektPtr) :GadgetPtr;
PROCEDURE frageHPosition ( objekt :ObjektPtr) :CARDINAL;
PROCEDURE frageVPosition ( objekt :ObjektPtr) :CARDINAL;
PROCEDURE frageEnde () :ObjektEnde;
PROCEDURE setzeHPosition ( objekt :ObjektPtr;
Position,
MaxPosition :CARDINAL);
PROCEDURE setzeVPosition ( objekt :ObjektPtr;
Position,
MaxPosition :CARDINAL);
PROCEDURE setzeHVPosition ( objekt :ObjektPtr;
HPosition,
VPosition,
HMaxPosition,
VMaxPosition :CARDINAL);
(*
* --------------------------------------------------------------------------
* erzeugeXXX erzeugt entsprechendes Objekt, bindet es ein und erzeugt direkt
* eine Ausgabe im Fenster.
* Bei Eingabeobjekten wird intern eine Referenz auf die
* Eingabevariable gesetzt, so das die Variable mindestens
* genau solange wie das Objekt existent sein muß.
* --------------------------------------------------------------------------
*)
PROCEDURE erzeugeBooleanObjekt ( Fenster :WindowPtr;
X,Y :INTEGER;
Text :ARRAY OF CHAR;
Nummer :INTEGER;
Typ :BooleanTyp;
EreignisAktion :ObjektAktion);
PROCEDURE erzeugeHPropObjekt ( Fenster :WindowPtr;
X,Y,
Breite,Hoehe :INTEGER;
Position,
MaxPosition :CARDINAL;
Nummer :INTEGER;
Typ :ProportionalTyp;
EreignisAktion :ObjektAktion);
PROCEDURE erzeugeVPropObjekt ( Fenster :WindowPtr;
X,Y,
Breite,Hoehe :INTEGER;
Position,
MaxPosition :CARDINAL;
Nummer :INTEGER;
Typ :ProportionalTyp;
EreignisAktion :ObjektAktion);
PROCEDURE erzeugeHVPropObjekt ( Fenster :WindowPtr;
X,Y,
Breite,Hoehe :INTEGER;
HPosition,
VPosition,
HMaxPosition,
VMaxPosition :CARDINAL;
Nummer :INTEGER;
Typ :ProportionalTyp;
EreignisAktion :ObjektAktion);
PROCEDURE erzeugeTextObjekt ( Fenster :WindowPtr;
X,Y :INTEGER;
Text :ARRAY OF CHAR;
Nummer,
xText,yText :INTEGER;
DisplayLaenge,
EingabeLaenge :CARDINAL;
EingabeOK :PruefeEingabe;
VAR EingabeSatz :ARRAY OF CHAR);
PROCEDURE erzeugeCardObjekt ( Fenster :WindowPtr;
X,Y :INTEGER;
Text :ARRAY OF CHAR;
Nummer,
xText,yText :INTEGER;
EingabeLaenge :CARDINAL;
EingabeOK :PruefeEingabe;
VAR EingabeZahl :CARDINAL);
PROCEDURE erzeugeLongCardObjekt ( Fenster :WindowPtr;
X,Y :INTEGER;
Text :ARRAY OF CHAR;
Nummer,
xText,yText :INTEGER;
EingabeLaenge :CARDINAL;
EingabeOK :PruefeEingabe;
VAR EingabeZahl :LONGCARD);
PROCEDURE erzeugeIntObjekt ( Fenster :WindowPtr;
X,Y :INTEGER;
Text :ARRAY OF CHAR;
Nummer,
xText,yText :INTEGER;
EingabeLaenge :CARDINAL;
EingabeOK :PruefeEingabe;
VAR EingabeZahl :INTEGER);
PROCEDURE erzeugeLongIntObjekt ( Fenster :WindowPtr;
X,Y :INTEGER;
Text :ARRAY OF CHAR;
Nummer,
xText,yText :INTEGER;
EingabeLaenge :CARDINAL;
EingabeOK :PruefeEingabe;
VAR EingabeZahl :LONGINT);
PROCEDURE erzeugeRealObjekt ( Fenster :WindowPtr;
X,Y :INTEGER;
Text :ARRAY OF CHAR;
Nummer,
xText,yText :INTEGER;
EingabeLaenge,
NachkommaStellen :CARDINAL;
Exponent :BOOLEAN;
EingabeOK :PruefeEingabe;
VAR EingabeZahl :REAL);
PROCEDURE erzeugeLongRealObjekt ( Fenster :WindowPtr;
X,Y :INTEGER;
Text :ARRAY OF CHAR;
Nummer,
xText,yText :INTEGER;
EingabeLaenge,
NachkommaStellen :CARDINAL;
Exponent :BOOLEAN;
EingabeOK :PruefeEingabe;
VAR EingabeZahl :LONGREAL);
PROCEDURE erzeugeFFPObjekt ( Fenster :WindowPtr;
X,Y :INTEGER;
Text :ARRAY OF CHAR;
Nummer,
xText,yText :INTEGER;
EingabeLaenge,
NachkommaStellen :CARDINAL;
Exponent :BOOLEAN;
EingabeOK :PruefeEingabe;
VAR EingabeZahl :FFP);
END IntuitionObjekte.